# !/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
===========================
@Time : 2022/11/1 0001 21:15
@Author : 测试开发工程师
@File : litemall_api.py
@Software: PyCharm
============================
"""

import requests
from last_testapi.utils.log_utils import logger


# 1. 把 token 封装在 请求中
# 2. 封装 send 方法（对 requests 的 二次封装）


class LitemallApi:

    def __init__(self, base_url):
        self.base_url = base_url

    def __set_token(self, **kwargs):
        """
        设置 token
        @return:
        """
        # 为了避免 token 的重复初始化
        # 通过 hasattr 自己这个对象本身 有没有 token 属性，去判断 是否需要 token 初始化
        if not hasattr(self, 'token'):
            # token 初始化
            admin_url = "https://litemall.hogwarts.ceshiren.com/admin/auth/login"
            admin_data = {'username': "admin123", 'password': "admin123", 'code': ""}
            admin_r = requests.request("post", admin_url, json=admin_data)
            print(admin_r.json())
            self.token = {"X-Litemall-Admin-Token": admin_r.json()["data"]["token"]}

        if kwargs.get('headers'):
            kwargs.update(self.token)
        else:
            kwargs['headers'] = self.token
        return kwargs

    def send(self, method, path, **kwargs):
        # 对请求信息做了二次修改
        kwargs = self.__set_token(**kwargs)
        logger.debug(f"请求方法为:{method},请求URL为:{self.base_url + path},其他请求信息为{kwargs}")
        r = requests.request(method, self.base_url + path, **kwargs)
        # 调式代码时可以通过添加代理，查看请求信息
        # r = requests.request(method, self.base_url + path,
        #                      proxies={'http': 'http://127.0.0.1:8888', 'https': 'http://127.0.0.1:8888'}, verify=False,
        #                      **kwargs)
        logger.debug(f"响应信息为:{r.text}")
        return r.json()
